/**
 * 
 */
package co.gov.medellin.sdep.sisdep.gestion.service;

import java.util.Date;
import java.util.List;

import co.gov.medellin.sdep.sisdep.common.message.MessageDescriptorConstant;
import co.gov.medellin.sdep.sisdep.common.service.BaseService;
import co.gov.medellin.sdep.sisdep.gestion.dto.VisitaAdministrativaDTO;
import co.gov.medellin.sdep.sisdep.gestion.exception.VisitaAdministrativaException;
import co.gov.medellin.sdep.sisdep.gestion.exception.VisitaAdministrativaRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.descriptor.VisitaAdministrativaMessageDescriptor;
import co.gov.medellin.sdep.sisdep.model.VisitaAdministrativa;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IVisitaAdministrativaDAOT;

/**
 * @author Usuario
 *
 */
public class VisitaAdministrativaServiceImpl extends BaseService implements IVisitaAdministrativaService {

	//----------------------------------------------------------------------
	//--- propiedades y constructores                                 init()
	//----------------------------------------------------------------------

	/**
	 * default serial version
	 */
	private static final long serialVersionUID = 1L;
	/** */
	private IVisitaAdministrativaDAOT visitaAdministrativaDAO;

	/**
	 * 
	 */
	public VisitaAdministrativaServiceImpl() {
	}

	//----------------------------------------------------------------------
	//--- propiedades y constructores                                  end()
	//----------------------------------------------------------------------

	//----------------------------------------------------------------------
	//--- implementacion de metodos para acciones                     init()
	//----------------------------------------------------------------------

	/**
	 * 
	 */
	public void insert(VisitaAdministrativa visitaAdministrativa) throws VisitaAdministrativaException {
		try{
			visitaAdministrativa.setUsuarioCrea(getPrincipalUser());
			if(visitaAdministrativa.isTieneRecomendacionesChk())
				visitaAdministrativa.setTieneRecomendaciones("S");
			else
				visitaAdministrativa.setTieneRecomendaciones("N");
			if(visitaAdministrativa.isTieneHojaDeVidaChk())
				visitaAdministrativa.setTieneHojaDeVida("S");
			else
				visitaAdministrativa.setTieneHojaDeVida("N");
			if(visitaAdministrativa.isEseDigitalChk())
				visitaAdministrativa.setEseDigital("S");
			else
				visitaAdministrativa.setEseDigital("N");
			if(visitaAdministrativa.isReguladoChk())
				visitaAdministrativa.setRegulado("S");
			else
				visitaAdministrativa.setRegulado("N");
			getVisitaAdministrativaDAO().insert(visitaAdministrativa);
		}catch (Exception e) {
			Object [] infoError = {
				visitaAdministrativa.getId()
			};
			if(e.getCause().toString().indexOf("UNIQUE KEY") >= 0){
				throw new VisitaAdministrativaException(new VisitaAdministrativaMessageDescriptor(MessageDescriptorConstant.UK_VIOLATION), infoError, e);
			}else{
				throw new VisitaAdministrativaException(new VisitaAdministrativaMessageDescriptor(MessageDescriptorConstant.SAVE), infoError, e);
			}
		}
	}

	/**
	 * 
	 */
	public final void update(VisitaAdministrativa visitaAdministrativa) throws VisitaAdministrativaException {
		try{
			visitaAdministrativa.setUsuarioModifica(getPrincipalUser());
			if(visitaAdministrativa.isTieneRecomendacionesChk())
				visitaAdministrativa.setTieneRecomendaciones("S");
			else
				visitaAdministrativa.setTieneRecomendaciones("N");
			if(visitaAdministrativa.isTieneHojaDeVidaChk())
				visitaAdministrativa.setTieneHojaDeVida("S");
			else
				visitaAdministrativa.setTieneHojaDeVida("N");
			if(visitaAdministrativa.isEseDigitalChk())
				visitaAdministrativa.setEseDigital("S");
			else
				visitaAdministrativa.setEseDigital("N");
			if(visitaAdministrativa.isReguladoChk())
				visitaAdministrativa.setRegulado("S");
			else
				visitaAdministrativa.setRegulado("N");
			getVisitaAdministrativaDAO().update(visitaAdministrativa);
		}catch (Exception e) {
			Object [] infoError = {
				visitaAdministrativa.getId()
			};
			if(e.getCause().toString().indexOf("UNIQUE KEY") >= 0){
				throw new VisitaAdministrativaRuntimeException(new VisitaAdministrativaMessageDescriptor(MessageDescriptorConstant.UK_VIOLATION), infoError, e);
			}else{
				throw new VisitaAdministrativaRuntimeException(new VisitaAdministrativaMessageDescriptor(MessageDescriptorConstant.UPDATE), infoError, e);
			}
		}
	}

	/**
	 * 
	 */
	public final void delete(VisitaAdministrativa visitaAdministrativa) throws VisitaAdministrativaException {
		try {
			visitaAdministrativa.setUsuarioModifica(getPrincipalUser());
			visitaAdministrativa.setFechaModifica(new Date());
			getVisitaAdministrativaDAO().delete(visitaAdministrativa);
		}catch (Exception e) {
			Object [] infoError = {
				visitaAdministrativa.getId()
			};
			throw new VisitaAdministrativaRuntimeException(new VisitaAdministrativaMessageDescriptor(MessageDescriptorConstant.DELETE), infoError, e);
		}
	}

	/**
	 * @return 
	 * 
	 */
	public final List load(int start,int max, VisitaAdministrativa visitaAdministrativa) throws VisitaAdministrativaException {
		try{
			//return getVisitaAdministrativaDAO().getAllVisitaAdministrativaPaginated(start, max, criteria);
			return getVisitaAdministrativaDAO().load();
		}catch (Exception e) {
			Object [] infoError = null;
			throw new VisitaAdministrativaRuntimeException(new VisitaAdministrativaMessageDescriptor(MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}
	
	/**
	 * @return 
	 * 
	 */
	public final List loadByRadicado(int start,int max, VisitaAdministrativa visitaAdministrativa) throws VisitaAdministrativaException {
		try{
			//return getVisitaAdministrativaDAO().getAllVisitaAdministrativaPaginated(start, max, criteria);
			return getVisitaAdministrativaDAO().loadByRadicado(visitaAdministrativa);
		}catch (Exception e) {
			Object [] infoError = null;
			throw new VisitaAdministrativaRuntimeException(new VisitaAdministrativaMessageDescriptor(MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}

	/**
	 * 
	 */
	public final VisitaAdministrativa get(long id) throws VisitaAdministrativaException {
		try{
			return getVisitaAdministrativaDAO().findByPrimaryKey(id);
		}catch (Exception e) {
			Object [] infoError = {new Long(id)};
			throw new VisitaAdministrativaRuntimeException(new VisitaAdministrativaMessageDescriptor(MessageDescriptorConstant.GET), infoError, e);
		}
	}

	/**
	 * 
	 */
	public VisitaAdministrativa getVisitaAdministrativaRelatedBy(
			long idSolicitud) throws VisitaAdministrativaException {
		try {
			VisitaAdministrativa criteria = new VisitaAdministrativa();
			criteria.setIdSolicitud(new Long(idSolicitud));
			return getVisitaAdministrativaDAO().findByCriteria(criteria);
		} catch (Exception e) {
			Object[] infoError = { new Long(idSolicitud) };
			throw new VisitaAdministrativaRuntimeException(
					new VisitaAdministrativaMessageDescriptor(
							MessageDescriptorConstant.GET), infoError, e);
		}
	}

	//----------------------------------------------------------------------
	//--- implementacion de metodos para acciones                      end()
	//----------------------------------------------------------------------

	//----------------------------------------------------------------------
	//--- getters and setters                                         init()
	//----------------------------------------------------------------------

	/**
	 * @author Usuario
	 *
	 */
	public IVisitaAdministrativaDAOT getVisitaAdministrativaDAO() {
		return visitaAdministrativaDAO;
	}

	/**
	 * @author Usuario
	 *
	 */
	public void setVisitaAdministrativaDAO(IVisitaAdministrativaDAOT visitaAdministrativaDAO) {
		this.visitaAdministrativaDAO = visitaAdministrativaDAO;
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.gestion.service.IVisitaAdministrativaService#getVisitAdminReport(co.gov.medellin.sdep.sisdep.model.VisitaAdministrativa)
	 */
	public VisitaAdministrativaDTO getVisitAdminReport(VisitaAdministrativa visitaAdministrativa) throws VisitaAdministrativaException {
		try{
			return getVisitaAdministrativaDAO().getVisitAdminReport(visitaAdministrativa);
		} catch (Exception e) {
			Object [] infoError = null;
			
			throw new VisitaAdministrativaRuntimeException(
					new VisitaAdministrativaMessageDescriptor(MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}

	//----------------------------------------------------------------------
	//--- getters and setters                                          end()
	//----------------------------------------------------------------------

}
